package domain;

import javax.swing.JOptionPane;

import database.iDatabase;

public class Speler {
	private String naam;
	private iSpelerTeken teken;
	private aScore score = new ScoreVast();
	private int stappen = 0;
	

	public Speler() {
		vraagNaam();
	}
	
	public Speler(iSpelerTeken spelerTekenChar, boolean b) {
		vraagNaam();
		this.setSpelerTeken(teken);
	}

	public Object vraagTeken() {
		return teken.getTeken();
		
	}

	public Speler(iSpelerTeken teken) {
		vraagNaam();
		this.setSpelerTeken(teken);
	}

	public Speler(String naam, iSpelerTeken teken, int score) {
		this.setSpelerNaam(naam);
		testTeken(teken);
		this.score.verhoogScore(score);
	}
	

	public Speler(String spelerNaam, int score) {
		this.setSpelerNaam(spelerNaam);
		this.score.verhoogScore(score);
	}
	
	public void verhoogStappen(){
		stappen++;
	}
	
	public void resetStappen(){
		stappen = 0;
	}
	
	public int getAantalStappen(){
		return stappen;
	}

	private void testTeken(Object mijnTeken) {
		if (mijnTeken instanceof Character){
			teken =  new SpelerTekenChar((Character)mijnTeken);
		}else if (mijnTeken instanceof Integer){
			teken =  new SpelerTekenAfbeelding((Integer)mijnTeken);
		}
	}

	private void vraagNaam() {
		String ingegevenNaam = JOptionPane.showInputDialog("Vul uw naam in: ");
		this.setSpelerNaam("Error 404, Name is Missing");
		if (ingegevenNaam != null && !ingegevenNaam.equals("")) {
			this.setSpelerNaam(ingegevenNaam);
		}
	}

	public String getSpelerNaam() {
		return naam;
	}

	private void setSpelerNaam(String naam) {
		this.naam = naam;
	}

	private void setSpelerTeken(iSpelerTeken spelerTeken) {
		this.teken = spelerTeken;
	}

	public iSpelerTeken getSpelerTeken() {
		return teken;
	}

	@Override
	public boolean equals(Object o) {
		boolean output = false;

		if (o instanceof Speler) {
			Speler s = (Speler) o;
			if (s.getSpelerNaam().equals(this.getSpelerNaam()))
				output = true;
		}

		return output;
	}

	public int getScore() {
		return score.getScore();
	}
	
	public void compareDifficultySpeler(Speler s)
	{
		int output = (this.getScore()/s.getScore())*100;
		
		if (output <= 75 && output > 0)
		{
			JOptionPane.showMessageDialog(null, "This is going to be easy.");
		}
		else if(output > 75 && output <= 125)
		{
			JOptionPane.showMessageDialog(null, "This is going to be average.");
		}
		else if(output > 125 && output <= 200)
		{
			JOptionPane.showMessageDialog(null, "This is going to be hard.");
		}
		else if(output > 200 && output <= 125)
		{
			JOptionPane.showMessageDialog(null, "You're fucked. Have fun :-)");
		}
	}

	public void berekenScore(boolean winnaar) {
		score.berekenScore(stappen, winnaar);
	}

	public void scoreOpslaan(iDatabase database) {
		iDatabase gegevensBank = database;
		gegevensBank.updateSpelerScore(this);
	}

	public void setScore(int nieuweScore) {
		score.verhoogScore(nieuweScore);
		
	}
}
